﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CongregacaoOs.Data;
using CongregacaoOs.Business;
using System.Web.Security;
using System.Text;


namespace CongregacaoOs.WebForm.Cadastros.NewUser
{
    public partial class UsuarioAnonimo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                AtualizarDropDowListRegional();
            }
        }



        public void EnviarEmail(int aCodigo, string aNome)
        {
            System.Threading.Thread.Sleep(1000);

            using (ccSendEmail busEmail = new ccSendEmail())
            {
                using (ClassEmail email = new ClassEmail())
                {
                    email.Assunto = @"Portal de O.S - Novo Usuário";
                    email.Menssagem = "<p  style = 'font-family:Arial;font-size:20pt'>Solicitação de Cadastro</p>" +
                        "<div style = 'border-top:3px solid #22BCE5>...............................................</div>'" +
                        "<br/>" + "Código do usuário: " + aCodigo + "<br />" +
                        "Usuário: " + aNome + " <br /> " +
                        "<a href='http://www.ccbos.com.br'>Ativar usuário agora!</a> " +
                        "<br /><br /><br />" +
                        "<code>Grupo de Apoio: Regional Ribeirão Preto <br/> Congregação Cristã no Brasil</code>" +
                        "<br/><br/><b>Não responda este e-mail</b>,";

                    ccPessoa entPes = new ccPessoa();
                    ccPessoaBus busPes = new ccPessoaBus();
                    email.Porta = 587;
                    
                    email.ListofDestinatario.Add("diasboldrin@gmail.com");
                    email.ListofDestinatario.Add("infotrans@terra.com.br");
                    busEmail.SendMail(email);

                    Functions.LimparCampos(this);
                    return;
                }
            }
        }

        public void AtualizarDropDowListRegional(int aID = 0)
        {
            ccRegionalBus bus = new ccRegionalBus();
            ccRegional ent = new ccRegional();
            dropRegional.DataSource = bus.RegionalSelect(ent);
            dropRegional.DataBind();
            dropRegional.SelectedIndex = 0;
        }

        public void AtualizarDropDowListDistrital()
        {
            ccDistritalBus bus = new ccDistritalBus();
            ccDistrital ent = new ccDistrital();

            if (dropRegional.SelectedValue != "")
            {
                ent.idRegional = Convert.ToInt32(dropRegional.SelectedValue);
                dropDistrital.DataSource = bus.DistritalSelect(ent);
                dropDistrital.DataBind();
            }
            else
            {
                dropDistrital.Items.Clear();
                dropSetor.Items.Clear();
                dropCargo.Items.Clear();
                dropAdministracao.Items.Clear();
                dropCidade.Items.Clear();
                dropComum.Items.Clear();
            }
        }

        public void AtualizarDropDowListCidade(int aID = 0)
        {
            if (dropRegional.SelectedValue != "" && dropDistrital.SelectedValue != "" && dropAdministracao.SelectedValue != "")
            {
                ccCidadeBus bus = new ccCidadeBus();
                ccCidade ent = new ccCidade();
                ent.idRegional = aID;

                ent.idRegional = dropRegional.SelectedValue != "" ? Convert.ToInt32(dropRegional.SelectedValue) : 0;

                ent.idDistrital = dropDistrital.SelectedValue != "" ? Convert.ToInt32(dropDistrital.SelectedValue) : 0;

                dropCidade.DataSource = bus.CidadeSelectComboBox(ent);
                dropCidade.DataBind();
            }
            else
            {
                dropCidade.Items.Clear();
                dropComum.Items.Clear();
            }
        }

        public void AtualizarDropDowListIgreja()
        {
            ccIgrejaBus bus = new ccIgrejaBus();
            ccIgreja ent = new ccIgreja();

            if (dropCidade.SelectedValue != "")
            {
                ent.idCidade = dropCidade.SelectedValue != "" ? Convert.ToInt32(dropCidade.SelectedValue) : 0;
                ent.nome = "";
                ent.numero = "";
                ent.idDistrital = 0;
                dropComum.DataSource = bus.IgrejaSelect(ent);
                dropComum.DataBind();
            }
            else
            {
                dropComum.Items.Clear();
            }

        }


        public void AtualizarDropDowListCargo()
        {
            if (dropSetor.SelectedValue != "")
            {
                ccSetorCargosBus bus = new ccSetorCargosBus();
                ccSetorCargos ent = new ccSetorCargos();
                List<ccSetorCargosSelect_Result> listResult = new List<ccSetorCargosSelect_Result>();
                if (dropSetor.SelectedValue != "0")
                    listResult = bus.SetorCargosSelect(Convert.ToInt32(dropSetor.SelectedValue));

                if (listResult != null)
                {
                    dropCargo.DataSource = listResult;
                    dropCargo.DataBind();
                }
                else
                {
                    dropCargo.Items.Clear();
                }
            }
            else { dropCargo.Items.Clear(); }
        }

        public void AtualizarDropDowListSetor()
        {
            ccSetorBus bus = new ccSetorBus();
            ccSetor ent = new ccSetor();

            if (dropAdministracao.SelectedValue != "")
            {
                int aIdAdm = dropAdministracao.SelectedValue != "" ? Convert.ToInt32(dropAdministracao.SelectedValue) : 0;
                dropSetor.DataSource = bus.SetorSelectByAdm(aIdAdm);
                dropSetor.DataBind();
            }
            else
            {
                dropSetor.Items.Clear();
                dropCargo.Items.Clear();
            }

        }


        public void AtualizarDropDowListAdm()
        {
            ccAdmBus bus = new ccAdmBus();
            ccAdm ent = new ccAdm();

            if (dropRegional.SelectedValue != "" && dropDistrital.SelectedValue != "")
            {
                ent.idRegional = dropRegional.SelectedValue != "" ? Convert.ToInt32(dropRegional.SelectedValue) : 0;
                ent.idDistrital = dropDistrital.SelectedValue != "" ? Convert.ToInt32(dropDistrital.SelectedValue) : 0;

                dropAdministracao.DataSource = bus.AdmSelect(ent);
                dropAdministracao.DataBind();
            }
            else
            {
                dropAdministracao.Items.Clear();
                dropSetor.Items.Clear();
                dropCargo.Items.Clear();
                dropCidade.Items.Clear();
                dropComum.Items.Clear();
            }
        }

        protected void btnSalvar_Click(object sender, EventArgs e)
        {

            //if (dropAdministracao.SelectedValue == "" || dropSetor.SelectedValue == ""|| dropCargo.SelectedValue == "" || dropCidade.SelectedValue =="" || dropComum.SelectedValue =="") 
            //{
            //    MessageWindow.Texto = "Os campos Administração, Setor e Cargo são obrigatórios";
            //    MessageWindow.MessageType = false;
            //    MessageWindow.ShowWindow();
            //    return;
            //}

            //if (txtUsuario.Text == "" || txtSenha.Text == "" || txtSenhaConfirm.Text == "" || txtLembrete.Text == "")
            //{
            //    MessageWindow.Texto = "Os campos Senha, Confirmação de Senha e Lembrete da Senha  são obrigatórios.";
            //    MessageWindow.MessageType = false;
            //    MessageWindow.ShowWindow();
            //    return;
            //}

            string RequiredFields = RequiredField();
            if (RequiredFields != "")
            {
                MessageWindow.Texto = "Preencha os campo(s) " + RequiredFields;
                MessageWindow.MessageType = false;
                MessageWindow.ShowWindow();
                return;
            }

            ccPessoaBus bus = new ccPessoaBus();
            ccPessoa ent = new ccPessoa();

            ent.nome = txtNome.Text.Trim();
            ent.email = txtEmail.Text.Trim();
            ent.celular = txtCelular.Text.Trim();
            ent.fone = txtTelefone.Text.Trim();
            ent.status = false;

            ent.idRegional = dropRegional.SelectedValue != "" ? Convert.ToInt32(dropRegional.SelectedValue) : 0;
            ent.idDistrital = dropDistrital.SelectedValue != "" ? Convert.ToInt32(dropDistrital.SelectedValue) : 0;
            ent.idCidade = dropCidade.SelectedValue != "" ? Convert.ToInt32(dropCidade.SelectedValue) : 0;
            ent.idComum = dropComum.SelectedValue != "" ? Convert.ToInt32(dropComum.SelectedValue) : 0;
            ent.idCargo = dropCargo.SelectedValue != "" ? Convert.ToInt32(dropCargo.SelectedValue) : 0;
            ent.idSetor = dropSetor.SelectedValue != "" ? Convert.ToInt32(dropSetor.SelectedValue) : 0;
            ent.idAdm = dropAdministracao.SelectedValue != "" ? Convert.ToInt32(dropAdministracao.SelectedValue) : 0;

            if (txtSenha.Text.Trim() == txtSenhaConfirm.Text.Trim())
            {
                MembershipCreateStatus status;
                MembershipUser novoUsuario = Membership.CreateUser(txtUsuario.Text.Trim(), txtSenha.Text.Trim(), txtEmail.Text.Trim(), txtLembrete.Text.Trim(), txtLembrete.Text.Trim(), false, out status);
                switch (status)
                {
                    case MembershipCreateStatus.Success:
                        try
                        {
                            Roles.AddUserToRole(txtUsuario.Text.Trim(), "Local");
                            ent.idUsuario = (Guid)novoUsuario.ProviderUserKey;

                            int aIdNovoUsuario = bus.PessoaSaveOrUpdate(ent, txtLembrete.Text.Trim());
                            try
                            {
                                EnviarEmail(aIdNovoUsuario, txtNome.Text);
                            }
                            catch (Exception)
                            {
                                MessageWindow.MessageType = true;
                                MessageWindow.Texto = "O usuário foi criado com sucesso. No entando, houve um erro ao avisar os administradores do portal. \n "+
                                                        "Por gentileza envie um e-mail para diasboldrin@gmail.com ou infotrans@terra.com.br notificando o seu cadastro!";
                                MessageWindow.ShowWindow();
                                hfIndexAccordion.Value = "1";

                                return;

                            }
                            
                            Functions.LimparCampos(this);

                            MessageWindow.MessageType = true;
                            MessageWindow.Texto = "Usuário criado com sucesso.\n Após a confirmação das suas informações \n em até 48 horas a sua conta será ativada.!";
                            MessageWindow.ShowWindow();
                            hfIndexAccordion.Value = "1";
                        }
                        catch (Exception erro)
                        {
                            MessageWindow.MessageType = false;
                            MessageWindow.Texto = "Ocorreu um erro ao relacionar o usuário como o seu grupo. Exclua o usuário e tente novamente.!"+erro.Message;
                            MessageWindow.ShowWindow();
                            return;
                        }
                        break;
                    case MembershipCreateStatus.DuplicateUserName:
                        MessageWindow.MessageType = false;
                        MessageWindow.Texto = "Já existe um usuário com esse username.!";
                        MessageWindow.ShowWindow();
                        break;
                    case MembershipCreateStatus.DuplicateEmail:

                        MessageWindow.MessageType = false;
                        MessageWindow.Texto = "Este email já esta cadastrado na base.!";
                        MessageWindow.ShowWindow();
                        break;
                    case MembershipCreateStatus.InvalidEmail:
                        MessageWindow.MessageType = false;
                        MessageWindow.Texto = "Este endereço de email é inválido.";
                        MessageWindow.ShowWindow();
                        break;
                    case MembershipCreateStatus.InvalidAnswer:
                        MessageWindow.MessageType = false;
                        MessageWindow.Texto = "Resposta de segurança é invalida.";
                        MessageWindow.ShowWindow();
                        break;
                    case MembershipCreateStatus.InvalidPassword:
                        MessageWindow.MessageType = false;
                        MessageWindow.Texto = "A senha informada é invalida, tente novamente.";
                        MessageWindow.ShowWindow();
                        break;
                    default:
                        MessageWindow.MessageType = false;
                        MessageWindow.Texto = "Ocorreu um erro desconhecido, o usuário não foi criado.";
                        MessageWindow.ShowWindow();
                        break;
                }
            }
            else
            {
                MessageWindow.MessageType = false;
                MessageWindow.Texto = "Verifique as senhas.Pois as informações são diferentes.";
                MessageWindow.ShowWindow();
            }

            Functions.LimparCampos(this);
        }


        protected void dropRegional_SelectedIndexChanged(object sender, EventArgs e)
        {
            AtualizarDropDowListDistrital();
        }

        protected void dropCidade_SelectedIndexChanged(object sender, EventArgs e)
        {
            AtualizarDropDowListIgreja();
        }

        protected void dropAdministracao_SelectedIndexChanged(object sender, EventArgs e)
        {
            AtualizarDropDowListSetor();
            AtualizarDropDowListCidade();
        }

        protected void dropRegional_DataBound(object sender, EventArgs e)
        {
            dropRegional.Items.Insert(0, new ListItem("Escolha a Regional...", String.Empty));
        }

        protected void dropDistrital_DataBound(object sender, EventArgs e)
        {
            dropDistrital.Items.Insert(0, new ListItem("Escolha a Distrital...", String.Empty));
        }

        protected void dropAdministracao_DataBound(object sender, EventArgs e)
        {
            dropAdministracao.Items.Insert(0, new ListItem("Escolha a Administração...", String.Empty));
        }

        protected void dropSetor_DataBound(object sender, EventArgs e)
        {
            dropSetor.Items.Insert(0, new ListItem("Escolha o Setor...", String.Empty));
        }

        protected void dropCargo_DataBound(object sender, EventArgs e)
        {
            dropCargo.Items.Insert(0, new ListItem("Escolha o Cargo...", String.Empty));
        }

        protected void dropCidade_DataBound(object sender, EventArgs e)
        {
            dropCidade.Items.Insert(0, new ListItem("Escolha a Cidade...", String.Empty));
        }

        protected void dropComum_DataBound(object sender, EventArgs e)
        {
            dropComum.Items.Insert(0, new ListItem("Escolha a Comum...", String.Empty));
        }

        protected void dropSetor_SelectedIndexChanged(object sender, EventArgs e)
        {
            AtualizarDropDowListCargo();
        }

        protected void dropDistrital_SelectedIndexChanged(object sender, EventArgs e)
        {
            AtualizarDropDowListAdm();
        }

        protected void btnVoltar_Click(object sender, EventArgs e)
        {
            Response.Redirect(@"~\Cadastros\Account\Login.aspx");
            hfIndexAccordion.Value = "0";
        }

        public string RequiredField() 
        {

            string Fields = "";

            Fields += dropAdministracao.Text == "" ? "Administração \n" : "";
            Fields += dropSetor.Text == "" ? ", Setor \n" : "";
            Fields += dropCargo.Text == "" ? ", Cargo \n" : "";
            Fields += dropCidade.Text == "" ? ", Cidade \n" : "";
            Fields += dropComum.Text == "" ? ", Comum \n" : "";
            Fields += txtUsuario.Text == "" ? ", Usuário \n" : "";
            Fields += txtSenha.Text == "" ? ", Senha \n" : "";
            Fields += txtSenhaConfirm.Text == "" ? ", Confirmação da Senha \n" : "";
            Fields += txtLembrete.Text == "" ? ", Lembrete da Senha \n" : "";

            Fields += txtNome.Text == "" ? ", Nome \n" : "";
            Fields += txtEmail.Text == "" ? ", Email \n" : "";

            return Fields;
        }
    }
}